/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package db_interaction;

import javax.persistence.Entity;
import javax.persistence.Table;
import java.io.Serializable;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.Query;
import org.hibernate.Session;

/**
 *
 * @author Nuno
 */
@Entity
@Table(name = "notificacao")
public class Notificacao implements Serializable {

    @Id
    @GeneratedValue
    private int Notificacoes_id;
    @Basic
    @Column(name = "Notificacoes_Utilizador_id")
    private int Notificacoes_Utilizador_id;
    @Basic
    @Column(name = "Notificacoes_descricao")
    private String Notificacoes_descricao;
    @Basic
    @Column(name = "Notificacoes_amigos")
    private boolean Notificacoes_amigos;
    @Basic
    @Column(name = "Notificacoes_publicacoes")
    private boolean Notificacoes_publicacoes;
    @Basic
    @Column(name = "Notificacoes_Mensagens")
    private boolean Notificacoes_Mensagens;
    @Basic
    @Column(name = "Notificacoes_amigos_id")
    private int Notificacoes_amigos_id;
    @Basic
    @Column(name = "Notificacoes_mensagens_id")
    private int Notificacoes_mensagens_id;
    @Basic
    @Column(name = "Notificacoes_publicacoes_id")
    private int Notificacoes_publicacoes_id;
    @Basic
    @Column(name = "Notificacoes_activo")
    private boolean Notificacoes_activo;

    //GETS
    public int GETNotificacoes_id() {
        return this.Notificacoes_id;
    }

    public int GETNotificacoes_Utilizador_id() {
        return this.Notificacoes_Utilizador_id;
    }

    public String GETNotificacoes_descricao() {
        return this.Notificacoes_descricao;
    }

    public boolean GETNotificacoes_amigos() {
        return this.Notificacoes_amigos;
    }

    public boolean GETNotificacoes_mensagens() {
        return this.Notificacoes_Mensagens;
    }

    public boolean GETNotificacoes_publicacoes() {
        return this.Notificacoes_publicacoes;
    }

    public int GETNotificacoes_amigos_id() {
        return this.Notificacoes_amigos_id;
    }

    public int GETNotificacoes_mensagens_id() {
        return this.Notificacoes_mensagens_id;
    }

    public int GETNotificacoes_publicacoes_id() {
        return this.Notificacoes_publicacoes_id;
    }

    public boolean GETNotificacoes_activo() {
        return this.Notificacoes_activo;
    }

    //SETS
    public void SETNotificacoes_id(int Notificacoes_id) {
        this.Notificacoes_id = Notificacoes_id;
    }

    public void SETNotificacoes_Utilizador_id(int Notificacoes_Utilizador_id) {
        this.Notificacoes_Utilizador_id = Notificacoes_Utilizador_id;
    }

    public void SETNotificacoes_descricao(String Notificacoes_descricao) {
        this.Notificacoes_descricao = Notificacoes_descricao;
    }

    public void SETNotificacoes_amigos(boolean Notificacoes_amigos) {
        this.Notificacoes_amigos = Notificacoes_amigos;
    }

    public void SETNotificacoes_mensagens(boolean Notificacoes_mensagens) {
        this.Notificacoes_Mensagens = Notificacoes_mensagens;
    }

    public void SETNotificacoes_publicacoes(boolean Notificacoes_publicacoes) {
        this.Notificacoes_publicacoes = Notificacoes_publicacoes;
    }

    public void SETNotificacoes_amigos_id(int Notificacoes_amigos_id) {
        this.Notificacoes_amigos_id = Notificacoes_amigos_id;
    }

    public void SETNotificacoes_mensagens_id(int Notificacoes_mensagens_id) {
        this.Notificacoes_mensagens_id = Notificacoes_mensagens_id;
    }

    public void SETNotificacoes_publicacoes_id(int Notificacoes_publicacoes_id) {
        this.Notificacoes_publicacoes_id = Notificacoes_publicacoes_id;
    }

    public void SETNotificacoes_activo(boolean Notificacoes_activo) {
        this.Notificacoes_activo = Notificacoes_activo;
    }
    //DB access

    public int SelectNumberNotifications(int id_user) {
        int n_notifications = 0;
        List<Notificacao> notis = null;

        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.beginTransaction();

            Query q = s.createQuery("from Notificacao where Notificacoes_Utilizador_id = " + id_user + " and Notificacoes_activo=1");
            //n_notifications = q.list().size();
            notis = q.list();

            s.getTransaction().commit();

            n_notifications = notis.size();

            return n_notifications;


        } catch (Exception e) {
            return 0;
        }
    }

    public List<Notificacao> SelectAllNotifications(int id_user) {
        List<Notificacao> notis = null;

        try {
            Session s = NewHibernateUtil.getSessionFactory();
            s.beginTransaction();

            Query q = s.createQuery("from Notificacao where Notificacoes_Utilizador_id = " + id_user + " and Notificacoes_activo=1");
            notis = q.list();

            s.getTransaction().commit();

            return notis;


        } catch (Exception e) {
            return null;
        }
    }

    public Boolean InsertNotification(String email_user_amigo, int id_amigo) {

        List<Utilizador> ut = null;
        Notificacao inser_not = new Notificacao();

        try {

            Session s = NewHibernateUtil.getSessionFactory();

            int id_user_notification;

            /// *************** QUERY PARA DESCOBRIR O ID DO AMIGO QUE ADICIONOU ******************** //

            s.beginTransaction();

            Query q2 = s.createQuery("from Utilizador where Utilizador_email like'%" + email_user_amigo + "%'");
            ut = q2.list();

            s.getTransaction().commit();

            id_user_notification = ut.get(0).getid();


            // ****************** INSERCAO NA TABELA AMIGOS ******************** //

            s.beginTransaction();

            inser_not.SETNotificacoes_Utilizador_id(id_user_notification);
            inser_not.SETNotificacoes_descricao("---");
            inser_not.SETNotificacoes_amigos(true);
            inser_not.SETNotificacoes_mensagens(false);
            inser_not.SETNotificacoes_publicacoes(false);
            inser_not.SETNotificacoes_amigos_id(id_amigo);
            inser_not.SETNotificacoes_mensagens_id(0);
            inser_not.SETNotificacoes_publicacoes_id(0);
            inser_not.SETNotificacoes_activo(true);

            s.save(inser_not);

            s.getTransaction().commit();


            return true;

        } catch (Exception e) {
            return false;
        }
    }

    public Boolean InsertNotificationMessage(int Mensagens_Utilizador_id, int res_add_message) {

        List<Utilizador> ut = null;
        Notificacao inser_not = new Notificacao();

        try {

            Session s = NewHibernateUtil.getSessionFactory();

            // ****************** INSERCAO NA TABELA AMIGOS ******************** //

            s.beginTransaction();

            inser_not.SETNotificacoes_Utilizador_id(Mensagens_Utilizador_id);
            inser_not.SETNotificacoes_descricao("---");
            inser_not.SETNotificacoes_amigos(false);
            inser_not.SETNotificacoes_mensagens(true);
            inser_not.SETNotificacoes_publicacoes(false);
            inser_not.SETNotificacoes_amigos_id(0);
            inser_not.SETNotificacoes_mensagens_id(res_add_message);
            inser_not.SETNotificacoes_publicacoes_id(0);
            inser_not.SETNotificacoes_activo(true);

            s.save(inser_not);

            s.getTransaction().commit();


            return true;

        } catch (Exception e) {
            return false;
        }
    }
}
